//抽象类
/*
*
 * 
 * 
 * 
 * 抽象类通过abstract 关键字来定义
 * 
 * dart中的抽象方法不能用 abstract声明 dart中没有方法体的方法称之为抽象方法
 * 
 * 如果子类继承抽象类 必须要实现里面的抽象方法
 * 
 * 如果把抽象类当做接口实现的话必须得实现抽象类里面定义的所有属性和方法
 * 
 * 抽象类不能被实例化 只有继承它的子类可以
 * 
 * 多态：
 * 父类定义一个方法不去实现它 由继承它的子类去实现它
 * 
 * 
 * extends抽象类 和 implements的区别
 * 1.如果要复用抽象类里面的方法，并且用抽象方法约束自类的话我们就用extends继承抽象类、
 * 2.如果只是把抽象类当做标准的话我们就用implements实现抽象类
 * 
 * 
 */
//abstract 关键字申明抽象类
abstract class Animal{
  String name;
  //eat() 该方法为抽象方法 ，
  eat();
  // run();
  printInfo(){
    print("我是一个抽象类里面的方法----------printInfo----------->");
  }
}
class Dog extends Animal{
  //子类继承了 抽象类，子类必须实现父类的全部抽象方法
  @override
  eat(){
    return null;
  }

  @override
  run() {
    // TODO: implement run
    return null;
  }

}



class cat extends Animal{
  @override
  eat() {
    // TODO: implement eat
    print("执行了eat----------------->");
  }
  @override
  run() {
    // TODO: implement run
    return null;
  }
}
main(){
 // Animal a = new Animal();//错误 抽象类无法直接实例化  只有继承它的子类才可以实例化
/**
 * 
 Dog d = new Dog();
 d.printInfo();

 Animal d = new Dog();//多态是指把子类的一个实例 赋值给父类的引用 这样只能调用父类里面的方法了
 d.eat();
 */

}


